package org.facyt.vacas.view.formulacion.popup;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.facyt.commons.util.VaadinUtil;
import org.facyt.commons.view.form.FieldGenerator;
import org.facyt.commons.view.form.GenericForm;
import org.facyt.commons.view.window.FormWindow;
import org.facyt.vacas.view.formulacion.bean.MateriaPrimaBean;
import org.facyt.vacas.view.formulacion.field.MateriaPrimaComboBox;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;

import com.vaadin.data.Item;
import com.vaadin.ui.Component;
import com.vaadin.ui.Field;

@org.springframework.stereotype.Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class PopupVerMateriaPrimaFormulacion extends FormWindow<MateriaPrimaBean> {

	private static final long serialVersionUID = 802327156556596727L;

	@Autowired
	protected MateriaPrimaComboBox materiaPrimaComboBox;

	private static final Object[] VISIBILIDAD_FORM = {
			MateriaPrimaBean.NombreAtributos.MATERIA_PRIMA,
			MateriaPrimaBean.NombreAtributos.COSTO,
			MateriaPrimaBean.NombreAtributos.IGUAL_A,
			MateriaPrimaBean.NombreAtributos.MAS_DE,
			MateriaPrimaBean.NombreAtributos.MENOS_DE };

	private static final String[] ORDEN_FORM = {
			MateriaPrimaBean.NombreAtributos.MATERIA_PRIMA,
			MateriaPrimaBean.NombreAtributos.COSTO,
			MateriaPrimaBean.NombreAtributos.IGUAL_A,
			MateriaPrimaBean.NombreAtributos.MAS_DE,
			MateriaPrimaBean.NombreAtributos.MENOS_DE  };

	public void setMateriaPrimaComboBox(
			MateriaPrimaComboBox materiaPrimaComboBox) {
		this.materiaPrimaComboBox = materiaPrimaComboBox; 
	}

	@Override
	protected void init() {

		super.init();
		this.setHeight("240px");
		this.setWidth("350px");
		this.setModal(true);
		this.setResizable(false);
		this.setStyleName("agregar-materia-windows");
	}

	@Override
	protected MateriaPrimaBean crearBeanForm() {
		return new MateriaPrimaBean();
	}

	@Override
	protected void agregarTituloVentana() {
		String titulo = VaadinUtil
				.getProperties("ventana.materia.prima.titulo");
		this.setCaption(titulo);

	}

	@Override
	protected Map<String, String> obtenerCaptionForm() {

		Map<String, String> captions = new HashMap<String, String>();

		captions.put(MateriaPrimaBean.NombreAtributos.MATERIA_PRIMA,
				"ventana.materia.prima.label.materia.prima");
		captions.put(MateriaPrimaBean.NombreAtributos.COSTO,
				"ventana.materia.prima.label.costo");
		captions.put(MateriaPrimaBean.NombreAtributos.IGUAL_A,
				"ventana.materia.prima.label.iguala");
		captions.put(MateriaPrimaBean.NombreAtributos.MAS_DE,
				"ventana.materia.prima.label.masde");
		captions.put(MateriaPrimaBean.NombreAtributos.MENOS_DE,
				"ventana.materia.prima.label.menosde");

		return captions;
	}

	@Override
	protected void addFieldGenerator(GenericForm<MateriaPrimaBean> form) {

		form.addFieldGenerator(MateriaPrimaBean.NombreAtributos.MATERIA_PRIMA,
				new FieldGenerator() {

					@Override
					public Field createField(Item item, Object propertyId,
							Component uiContext) {
						return PopupVerMateriaPrimaFormulacion.this.materiaPrimaComboBox;
					}
				});
	}

	@Override
	protected Object[] obtenerVisibilidadComponentesFormulario() {
		return VISIBILIDAD_FORM;
	}

	@Override
	protected List<String> obtenerOrdenPropiedades() {
		return new ArrayList<String>(Arrays.asList(ORDEN_FORM));
	}

	@Override
	protected Map<String, Boolean> obtenerCamposSoloLectura() {
		Map<String, Boolean> sololectura = new HashMap<String, Boolean>();
		sololectura.put(MateriaPrimaBean.NombreAtributos.MATERIA_PRIMA,
				Boolean.FALSE);
		sololectura.put(MateriaPrimaBean.NombreAtributos.COSTO, Boolean.FALSE);
		sololectura
				.put(MateriaPrimaBean.NombreAtributos.IGUAL_A, Boolean.FALSE);
		sololectura.put(MateriaPrimaBean.NombreAtributos.MAS_DE, Boolean.FALSE);
		sololectura.put(MateriaPrimaBean.NombreAtributos.MENOS_DE,
				Boolean.FALSE);

		return sololectura;
	}

	@Override
	protected Map<String, Boolean> obtenerCamposRequeridos() {
		Map<String, Boolean> requeridos = new HashMap<String, Boolean>();
		requeridos.put(MateriaPrimaBean.NombreAtributos.MATERIA_PRIMA,
				Boolean.TRUE);
		requeridos.put(MateriaPrimaBean.NombreAtributos.COSTO, Boolean.TRUE);
		requeridos.put(MateriaPrimaBean.NombreAtributos.IGUAL_A, Boolean.TRUE);
		requeridos.put(MateriaPrimaBean.NombreAtributos.MAS_DE, Boolean.TRUE);
		requeridos.put(MateriaPrimaBean.NombreAtributos.MENOS_DE, Boolean.TRUE);

		return requeridos;
	}

	@Override
	protected String obtenerNombreBotonCancelar() {
		return VaadinUtil.getProperties("windowMessage.button.cancel.label");
	}

	@Override
	protected String obtenerNombreBotonAceptar() {
		return VaadinUtil.getProperties("windowMessage.button.ok.label");
	}

	@Override
	protected void aceptar() {

	}

	@Override
	protected boolean isValidoFormulario() {

		return true;
	}

	@Override
	protected void cancelar() {
		this.close();
	}

	@Override
	protected boolean isBotonAceptarVisible() {
		return true;
	}

	@Override
	protected boolean isBotonCancelarVisible() {
		return true;
	}
}
